home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 19.zip / BS1 part 19 / how to learn assembler.adf / CH7 / Intuition.ASM < prev    next >
Assembly Source File  |  1988-04-04  |  9KB  |  466 lines

  1. ; 7_Intuition.asm
  2. ;** Demo-Program for working with Intuition **
  3.  
  4. movescreen     = -162
  5. openscreen     = -198
  6. closescreen    = -66
  7. openwindow     = -204
  8. closewindow    = -72
  9. autorequest    = -348
  10. SetMenuStrip   = -264
  11. ClearMenuStrip = -54
  12. PrintIText     = -216
  13. DrawImage      = -114
  14. DrawBorder     = -108
  15. DisplayBeep    = -96
  16. closelibrary   = -414
  17. openlib        = -408
  18. execbase       = 4
  19. GetMsg         = -372
  20.  
  21. joy2           = $dff0c
  22. fire           = $bfe001
  23.  
  24. ;!!! when > 500KB !!!
  25. ;org $40000
  26. ;load $40000
  27. ; or use AssemPro to place in CHIP RAM
  28. ;!!!!!!!!!!!!!!!!!!!!
  29.  
  30. run:
  31.  bsr    openint
  32.  bsr    scropen
  33.  bsr    windopen
  34.  bsr    setmenu
  35.  bsr    print
  36.  
  37.  lea    border,a1
  38.  move   #22,d0
  39.  move   #30,d1
  40.  bsr    borderdraw
  41.  
  42.  bsr    draw
  43.  
  44.  bsr    request
  45.  
  46. loop:
  47.  move.l execbase,a6
  48.  move.l windowhd,a0
  49.  move.l 86(a0),a0                ;User-Port
  50.  jsr    GetMsg(a6)
  51.  tst.l  d0
  52.  beq    loop                     ;no event Ereignis
  53.  move.l d0,a0
  54.  move.l $16(a0),msg              ;Event: LO=Item, HI=Event
  55.  move.l msg,d6                   ;to test
  56.  move.l d6,d7
  57.  lsr    #8,d7
  58.  lsr    #3,d7                    ;Sub menu point in D7
  59.  clr.l  d5
  60.  roxr   #1,d6
  61.  roxl   #1,d5                    ;Menu number in D5
  62.  and.l  #$7f,d6
  63.  cmp    #$7f,d6                  ;no menu point ?
  64.  beq    loop                     ;no: continue
  65.  lsr    #4,d6                    ;Menu point in D6
  66.  cmp    #1,d6                    ;Point 2 ?
  67.  bne    no1
  68.  move.l intbase,a6
  69.  move.l screenhd,a0
  70.  jsr    DisplayBeep(a6)
  71. no1:
  72.  cmp    #0,d6
  73.  bne    loop
  74.  
  75. ende:
  76.  bsr    clearmenu
  77.  bsr    windclose
  78.  bsr    scrclose
  79.  bsr    closeint
  80.  rts
  81.  
  82. openint:
  83.  move.l execbase,a6
  84.  lea    intname,a1
  85.  jsr    openlib(a6)
  86.  move.l d0,intbase
  87.  rts
  88.  
  89. closeint:
  90.  move.l execbase,a6
  91.  move.l intbase,a1
  92.  jsr    closelibrary(a6)
  93.  rts
  94.  
  95. scropen:
  96.  move.l intbase,a6
  97.  lea    screen_defs,a0
  98.  jsr    openscreen(a6)
  99.  move.l d0,screenhd
  100.  rts
  101.  
  102. scrclose:
  103.  move.l intbase,a6
  104.  move.l screenhd,a0
  105.  jsr    closescreen(a6)
  106.  rts
  107.  
  108. scrmove:
  109.  move.l intbase,a6
  110.  move.l screenhd,a0
  111.  jsr    movescreen(a6)
  112.  rts
  113.  
  114. windopen:
  115.  move.l intbase,a6
  116.  lea    windowdef,a0
  117.  jsr    openwindow(a6)
  118.  move.l d0,windowhd
  119.  rts
  120.  
  121. windclose:
  122.  move.l intbase,a6
  123.  move.l windowhd,a0
  124.  jsr    closewindow(a6)
  125.  rts
  126.  
  127. request:
  128.  move.l windowhd,a0
  129.  lea    btext,a1
  130.  lea    ltext,a2
  131.  lea    rtext,a3
  132.  move.l #0,d0
  133.  move.l #0,d1
  134.  move.l #180,d2
  135.  move.l #80,d3
  136.  move.l intbase,a6
  137.  jsr    autorequest(a6)
  138.  rts
  139.  
  140. setmenu:
  141.  lea    mentab,a0                ;Pointer to text pointer in A0
  142.  lea    menu,a1                  ;Pointer to Menu field in A1
  143.  move   #10,d1                   ;Menu position=10
  144.  
  145. menuloop:
  146.  clr.l  d2                       ;Menu point-Y =0
  147.  move.l a1,a2                    ;Save pointer
  148.  tst.l  (a0)
  149.  beq    setmenu1                 ;End
  150.  clr.l  (a1)+
  151.  move   d1,(a1)+
  152.  add.l  #70,d1
  153.  move.l #50,(a1)+
  154.  move.l #$a0001,(a1)+
  155.  move.l (a0)+,(a1)+              ;Menu title
  156.  lea    12(a1),a3
  157.  move.l a3,(a1)+                 ;Menu point
  158.  clr.l  (a1)+
  159.  clr.l  (a1)+
  160.  
  161. itemloop:
  162.  tst.l  (a0)                     ;last one ?
  163.  beq    menuend                  ;yes
  164.  lea    54(a1),a3
  165.  move.l a3,(a1)+                 ;Pointer to next  Point
  166.  move.l d2,(a1)+                 ;X/Y
  167.  add    #10,d2
  168.  move.l #$5a000a,(a1)+           ;width /height
  169.  move   #$52,(a1)+
  170.  clr.l  (a1)+
  171.  lea    16(a1),a3
  172.  move.l a3,(a1)+                 ;Text structor-pointer
  173.  clr.l  (a1)+
  174.  clr.l  (a1)+
  175.  clr.l  (a1)+
  176.  
  177.  move   #$1,(a1)+                ;Text-Structor set
  178.  clr    (a1)+
  179.  move.l #$50003,(a1)+
  180.  clr.l  (a1)+
  181.  move.l (a0)+,(a1)+              ;Text-pointer
  182.  clr.l  (a1)+
  183.  
  184.  bra    itemloop                 ;next  Point...
  185.  
  186. menuend:
  187.  clr.l  -54(a1)
  188.  tst.l  (a0)+
  189.  tst.l  (a0)                     ;nstill in Menu ?
  190.  beq    setmenu1                 ;no: ready
  191.  move.l a1,(a2)                  ;Pointer to next menu
  192.  bra    menuloop                 ;and continue
  193.  
  194. setmenu1:
  195.  move.l intbase,a6
  196.  move.l windowhd,a0
  197.  lea    menu,a1
  198.  jsr    SetMenuStrip(a6)
  199.  rts
  200.  
  201. clearmenu:
  202.  move.l intbase,a6
  203.  move.l windowhd,a0
  204.  jsr    ClearMenuStrip(a6)
  205.  rts
  206.  
  207. print:
  208.  move.l intbase,a6
  209.  move.l windowhd,a0
  210.  move.l 50(a0),a0
  211.  lea    ggtext,a1
  212.  move.l #30,d0 ;X
  213.  move.l #16,d1 ;Y
  214.  jsr    PrintIText(a6)
  215.  rts
  216.  
  217. draw:
  218.  move.l intbase,a6
  219.  move.l windowhd,a0
  220.  move.l 50(a0),a0
  221.  lea    image,a1
  222.  move.l #200,d0
  223.  move.l #100,d1
  224.  jsr    DrawImage(a6)
  225.  rts
  226.  
  227. borderdraw:
  228.  move.l intbase,a6
  229.  move.l windowhd,a0
  230.  move.l 50(a0),a0
  231.  jsr    DrawBorder(a6)
  232.  rts
  233.  
  234. screen_defs:
  235.  dc.w 0,0
  236.  dc.w 640,200
  237.  dc.w 4
  238.  dc.b 0
  239.  dc.b 1
  240.  dc.w $800
  241.  dc.w 15
  242.  dc.l 0
  243.  dc.l titel
  244.  dc.l 0
  245.  dc.l 0
  246.  
  247. windowdef:
  248.  dc.w 10,20
  249.  dc.w 300,150
  250.  dc.b 0,1
  251.  dc.l $300
  252.  dc.l $100f
  253.  dc.l gadget
  254.  dc.l 0
  255.  dc.l windname
  256. screenhd: dc.l 0
  257.  dc.l 0
  258.  dc.w 200,40,600,200
  259.  dc.w $f
  260.  
  261. btext:
  262.  dc.b 3,3
  263.  dc.b 0
  264.  align         dc.w 10,10
  265.  dc.l 0
  266.  dc.l bodytxt
  267.  dc.l 0
  268.  
  269. bodytxt: dc.b "Requester-Text",0
  270.  align        
  271. ltext:
  272.  dc.b 3,1
  273.  dc.b 0
  274.  align         dc.w 5,3
  275.  dc.l 0
  276.  dc.l lefttext
  277.  dc.l 0
  278.  
  279. lefttext: dc.b "left",0
  280.  align        
  281. rtext:
  282.  dc.b 0,1
  283.  dc.b 0
  284.  align         dc.w 5,3
  285.  dc.l 0
  286.  dc.l righttext
  287.  dc.l 0
  288.  
  289. righttext: dc.b "right",0
  290.  align        
  291. titel: dc.b "User Screen",0
  292. windname: dc.b "Window-Title",0
  293.  align        windowhd: dc.l 0
  294. intbase: dc.l 0
  295. intname: dc.b "intuition.library",0
  296.  align        msg: dc.l 0
  297. mentab:
  298.  dc.l menu1
  299.  dc.l mp11,mp12,mp13,mp14,mp15,mp16,mp17,mp18,mp19,0
  300.  dc.l menu2
  301.  dc.l mp21,mp22,mp23,0
  302.  dc.l menu3
  303.  dc.l mp31,mp32,0
  304.  dc.l menu4,mp41,0
  305.  dc.l 0
  306.  
  307. menu1: dc.b "Menu 1",0
  308. mp11:  dc.b "Point 11",0
  309. mp12:  dc.b "Point 12",0
  310. mp13:  dc.b "Point 13",0
  311. mp14:  dc.b "Point 14",0
  312. mp15:  dc.b "Point 15",0
  313. mp16:  dc.b "Point 16",0
  314. mp17:  dc.b "Point 17",0
  315. mp18:  dc.b "Point 18",0
  316. mp19:  dc.b "Point 19",0
  317.  
  318. menu2: dc.b "Menu 2",0
  319. mp21:  dc.b "End !",0
  320. mp22:  dc.b "Beep",0
  321. mp23:  dc.b "Point 23",0
  322.  
  323. menu3: dc.b "Menu 3",0
  324. mp31:  dc.b "Point 31",0
  325. mp32:  dc.b "Point 32",0
  326.  
  327. menu4: dc.b "Menu 4",0
  328. mp41:  dc.b "Point 41",0
  329.  align        
  330. gadget:
  331.  dc.l gadget1
  332.  dc.w 20,80,80,10
  333.  dc.w 0
  334.  dc.w $2                         ;Activation, $802 for LongInt
  335.  dc.w 4
  336.  dc.l border
  337.  dc.l 0
  338.  dc.l 0
  339.  dc.l 0
  340.  dc.l strinfo
  341.  dc.w 2
  342.  dc.l 0
  343.  
  344. border:
  345.  dc.w 0,0
  346.  dc.b 1,0,0
  347.  dc.b 5                          ;XY-Pair
  348.  dc.l koord
  349.  dc.l 0
  350. koord:
  351.  dc.w -2,-2,80,-2,80,9,-2,9,-2,-2
  352.  
  353. strinfo:
  354.  dc.l strpuffer
  355.  dc.l undo
  356.  dc.w 0                          ;Cursor-Position
  357.  dc.w 10                         ;max. Char
  358.  dc.w 0
  359.  dc.w 0,0,0,0,0
  360.  dc.l 0,0,0
  361. strpuffer: dc.b "Hello !",0,0,0
  362. undo: dc.l 0,0,0
  363.  align        
  364. gadget1:
  365.  dc.l gadget2                    ;more Gadget
  366.  dc.w 40,50,32,13
  367.  dc.w $6                         ;Flags: invert
  368.  dc.w $103                       ;Activate
  369.  dc.w 1                          ;Gadget-Type
  370.  dc.l image                      ;Gadget-Image
  371.  dc.l image2                     ;Select-Gadget
  372.  dc.l ggtext                     ;Gadget-Text
  373.  dc.l 0                          ;no Exclude
  374.  dc.l 0                          ;special Info
  375.  dc.w 1                          ;ID
  376.  dc.l 0                          ;UserData
  377.  
  378. ggtext:
  379.  dc.b 1,0,1
  380.  align         dc.w -8,14
  381.  dc.l 0
  382.  dc.l swtext
  383.  dc.l 0
  384. swtext: dc.b "Switch",0
  385.  align        
  386. image:
  387.  dc.w 0,0
  388.  dc.w 32,13
  389.  dc.w 1
  390.  dc.l imgdata
  391.  dc.b 2,1
  392.  dc.l 0
  393.  
  394. image2:
  395.  dc.w 0,0
  396.  dc.w 32,13
  397.  dc.w 1
  398.  dc.l imgdata2
  399.  dc.b 2,1
  400.  dc.l 0
  401.  
  402. imgdata:
  403.  dc.l 0
  404.  dc.l %00000000011100000000000000000000
  405.  dc.l %00000000111110000011101001000000
  406.  dc.l %00000000111110000010101101000000
  407.  dc.l %00000000011110000010101011000000
  408.  dc.l %00000000000111000011101001000000
  409.  dc.l %00000000000011100000000000000000
  410.  dc.l %00000000000001110000000000000000
  411.  dc.l %00000000000111111111100000000000
  412.  dc.l %00000000001111111111110000000000
  413.  dc.l %00000000001111111111110000000000
  414.  dc.l %00000000000110000001100000000000
  415.  dc.l 0
  416. imgdata2:
  417.  dc.l 0
  418.  dc.l %00000000000000000000111000000000
  419.  dc.l %00011101110111000001111100000000
  420.  dc.l %00010101000100000001111100000000
  421.  dc.l %00010101100110000001111000000000
  422.  dc.l %00011101000100000011100000000000
  423.  dc.l %00000000000000000111000000000000
  424.  dc.l %00000000000000001110000000000000
  425.  dc.l %00000000000111111111100000000000
  426.  dc.l %00000000001111111111110000000000
  427.  dc.l %00000000001111111111110000000000
  428.  dc.l %00000000000110000001100000000000
  429.  dc.l 0
  430.  
  431. gadget2:
  432.  dc.l 0
  433.  dc.w 150,30,100,50
  434.  dc.w 5
  435.  dc.w 2
  436.  dc.w 3                          ;Prop. Gadget
  437.  dc.l mover                      ;border
  438.  dc.l 0,0,0
  439.  dc.l specinfo
  440.  dc.w 3
  441.  dc.l 0
  442. specinfo:
  443.  dc.w 6                          ;Flags: freehoriz
  444.  dc.w 0,0
  445.  dc.w $ffff/10,$ffff/5
  446.  dc.w 0,0,0,0,0,0
  447.  
  448. mover:
  449.  dc.w 0,0,16,7
  450.  dc.w 1
  451.  dc.l moverdata
  452.  dc.b 1,0
  453.  dc.l 0
  454. moverdata:
  455.  dc.w %0111111111111110
  456.  dc.w %0101111111111010
  457.  dc.w %0101011111101010
  458.  dc.w %0101010110101010
  459.  dc.w %0101011111101010
  460.  dc.w %0101111111111010
  461.  dc.w %0111111111111110
  462.  
  463. menu: blk.w 500
  464.  
  465.  end
  466.